package com.example.shopping.config;

import com.example.shopping.pojo.User;
import com.example.shopping.service.UserService;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 配置登录权限逻辑
 */
public class UserRealm extends AuthorizingRealm {
    @Autowired(required = false)
    private UserService userService;

    /**
     * 执行授权逻辑
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
        System.out.println("执行授权逻辑");
        return null;
    }


    /**
     * 执行认证逻辑
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken arg0) throws AuthenticationException {
//		System.out.println("执行认证逻辑");
//
//		//登录用户名和密码
//		String name = "root";
//		String password = "root";
//
//		//编写shiro判断逻辑，判断用户名和密码
//		//1.判断用户名    类似于现在的手机密保
//		UsernamePasswordToken token = (UsernamePasswordToken)arg0;
//		if(!token.getUsername().equals(name)){
//			//用户名不存在
//			return null;//shiro底层会抛出UnKnowAccountException
//		}
//
//		//2.判断密码
//		return new SimpleAuthenticationInfo("",password,"");


        /***************************连接数据库的写法**************************/
        //编写shiro判断逻辑，判断用户名和密码
        //1.判断用户名
        UsernamePasswordToken token = (UsernamePasswordToken) arg0;
        //根据控制器中得到的用户名查询数据库中的账号密码
        User user = userService.selectByUname(token.getUsername());
        //得到用户对象，如果该对象是空的，说明账号不匹配，也就没有该用户对象
        if (user == null) {
            //用户名不存在
            return null;//shiro底层会抛出UnKnowAccountException
        }
        //反之用户对象不为空，则说明账号是存在的，进一步判断密码是否正确
        //2.判断密码
        return new SimpleAuthenticationInfo(user, user.getUpwd(), "");


    }

}
